package utils

import (
	"github.com/Jiu2015/gotestspace"
	"os"
	"testing"
)

var (
	TestRepoPath string
)

var commonTestSpace testspace.Space

func initTestSpace() {
	var err error

	commonTestSpace, err = testspace.Create(
		testspace.WithPathOption("testspace-*"),
		testspace.WithShellOption(`
git -c init.defaultBranch=master init --bare satellite.git && 
git clone satellite.git repo && 
(
	cd repo && 
	echo -n "aaa\n"> a.txt &&
	git add a.txt &&
	test_tick &&
	git commit -m "add a.txt" &&
	echo -n "A"> A.log &&
	git add A.log &&
	test_tick
	git commit -m "Add A.log" &&
	echo -n "B"> B.log &&
	git add B.log &&
	test_tick &&
	git commit -m "Add B.log" &&
	git push origin master &&
	git checkout -b branch1 &&
	echo -n "bbb\n"> b.txt &&
	git add b.txt && 
	test_tick && 
	git commit -m "add b.txt" && 
	git checkout -b branch2 &&
	echo -n "ccc\n"> c.txt && 
	git add c.txt &&
	test_tick
	git commit -m "add c.txt" &&
	git checkout -b branch3 && 
	echo -n "ddd\n"> d.txt &&
	git add d.txt && 
	test_tick
	git commit -m "add d.txt" &&
	git branch branch4 f1621b474b056b42d2d5f7e2f36e908945a9dd0f &&
	git branch branch5 f1621b474b056b42d2d5f7e2f36e908945a9dd0f &&
	git branch \ʕ\•\ᴥ\•\ʔ d1bc0607bd533e5184f943e74c0a8593dd0512d3 &&
	git branch \'test\' d1bc0607bd533e5184f943e74c0a8593dd0512d3 &&
	git tag v1.0.0 f11600a3091860120539f6bb046a3fdced7c200f && 
	git tag v0.0.1 d1bc0607bd533e5184f943e74c0a8593dd0512d3 && 
	git push --all &&
	git push --tags 
) &&
rm -rf repo && 
git -c init.defaultBranch=master init --bare empty.git
`),
	)
	if err != nil {
		// got error then panic
		panic(err)
	}

	TestRepoPath = commonTestSpace.GetPath("satellite.git")
}

func TestMain(m *testing.M) {
	initTestSpace()
	os.Exit(m.Run())
}
